package com.protocolterminal.AFN.entity;

import java.util.ArrayList;
import java.util.List;

import com.protocolterminal.function.FrameFunction;

public class AFN0AF10 implements Interface_Data {

	@Override
	public String frametolist(String frame) throws Exception {
		FrameFunction frameFunction = new FrameFunction();
		int n = Integer.valueOf(frameFunction.Reverse(frame.substring(0, 4)));

		List<String> datalist = new ArrayList<>();

		datalist.add(String.valueOf(n));

		for (int i = 0; i < n; i++) {
			// 序号
			datalist.add(String
					.valueOf(Integer.valueOf(frameFunction.Reverse(frame.substring(4 + 54 * i, 8 + 54 * i)), 16)));
			// 测量点好
			datalist.add(String
					.valueOf(Integer.valueOf(frameFunction.Reverse(frame.substring(8 + 54 * i, 12 + 54 * i)), 16)));
			// 通讯速率
			datalist.add(String.valueOf(Integer.valueOf(frame.substring(12 + 54 * i, 14 + 54 * i), 16) >> 5));
			// 端口
			datalist.add(String.valueOf(Integer.valueOf(frame.substring(12 + 54 * i, 14 + 54 * i), 16) & 0x1f));
			// 协议
			datalist.add(String.valueOf(Integer.valueOf(frame.substring(14 + 54 * i, 16 + 54 * i), 16)));
			// 地址
			datalist.add(frameFunction.Reverse(frame.substring(16 + 54 * i, 28 + 54 * i)));
			// 密码
			datalist.add(frameFunction.Reverse(frame.substring(28 + 54 * i, 40 + 54 * i)));
			// 费率个数
			datalist.add(String.valueOf(Integer.valueOf(frame.substring(40 + 54 * i, 42 + 54 * i), 16)));
			// 整数
			datalist.add(String.valueOf(4 + (Integer.valueOf(frame.substring(42 + 54 * i, 44 + 54 * i), 16) >> 2)));
			// 小数
			datalist.add(String.valueOf(1 + (Integer.valueOf(frame.substring(42 + 54 * i, 44 + 54 * i), 16) & 0x03)));
			// 采集器地址
			datalist.add(frameFunction.Reverse(frame.substring(44 + 54 * i, 56 + 54 * i)));
			// 大类
			datalist.add(String.valueOf(Integer.valueOf(frame.substring(56 + 54 * i, 58 + 54 * i), 16) >> 4));
			// 小类
			datalist.add(String.valueOf(Integer.valueOf(frame.substring(56 + 54 * i, 58 + 54 * i), 16) & 0x0f));
		}

		String data = "";
		for (String string : datalist) {
			data += string + "-";
		}
		return data.substring(0, data.length() - 1);
	}

	@Override
	public String listtoframe(List<String> datalist) throws Exception {

		FrameFunction frameFunction = new FrameFunction();
		int i = datalist.size();

		String data = "";
		data += frameFunction.Reverse(Integer.toHexString(i | 0x10000).substring(1));
		for (int j = 0; j < i; j++) {
			data += frameFunction.Reverse(Integer.toHexString(Integer.valueOf(datalist.get(j)) | 0x10000).substring(1));
		}

		return data;
	}

}
